/**
 * TODO: Vložit licenci.
 */

package cz.enif.commander.sources;

/**
 * Čtenář zdroje typu řetězec.
 * 
 * @author enif
 *
 */
final class StringSource implements ISource
{
	//// CONSTRUCTORS ////
	
	/**
	 * Konstruktor.
	 */
	public StringSource()
	{ 
		this.close();
	}
	
	//// PUBLIC ////
	
	/* (non-Javadoc)
	 * @see cz.enif.commander.sources.ISource#init(String input)
	 */
	@Override
	public boolean init(String input) 
	{
		if (input == null) return false;
		
		if (this.input != null) this.close();
		
		this.input = input;
		this.pos = 0;

        return true;
	}

	/* (non-Javadoc)
	 * @see cz.enif.commander.sources.ISource#next()
	 */
	@Override
	public int next() 
	{
		if (this.input == null || this.input.isEmpty() || this.pos >= this.input.length())
        {
            return -1;
        }
        else
        {
            return (int)this.input.charAt(this.pos++);
        }
	}
	
	/* (non-Javadoc)
	 * @see cz.enif.commander.sources.ISource#close()
	 */
	@Override
	public void close()
	{
		this.input = null;
		this.pos = 0;
	}
	
	////PRIVATE ////

	/** Vstupní řetězec, ze kterého se čte. */
    String input;

    /** Pozice znaku, který bude vrácen při dalším čtení. */
    private int pos;
}
